<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>
	<script type="text/javascript">
		/*
			作用域: 代码或变量可以使用的范围
				局部作用域(函数的作用域)：函数内部就是局部作用域
				全局作用域：整个script标签或者单独的js文件(在window中)
						   函数外部用var声明的变量
		*/
		// 全局变量 在函数内部和外部都能使用
		var a = 100
		console.log(window)
		function fn(){
			//在函数内部的变量是局部变量，只能在函数内部用
			// var a = 10
			console.log(a)
			//在函数内部不用let或var声明的变量，视为全局变量
			c = 20
		}
		fn()
		console.log(a)//100
		console.log(c)//20

		function f2(){
			var z = b = c =10;
		}
		f2()
		console.log("f2--", z)
		console.log("f2--", b)
		console.log("f2--", c)

		// =====================================
		function f3(){
			var a = 10000;
			function f4(){
				console.log(a)
			}
			f4()
		}
		f3()



		// 2.作用域链: 如果在局部作用域中使用变量时,他会从这个函数本身的作用域去找这个变量,如果没有,就往上一层找,直到全局作用域,这个方式就是作用域链
		var e = 2;
		function fun(){
			// var e = 4;
			function fchild(){
				// var e = 5;
				console.log("e---", e)
			}
			fchild()
		}

		fun()
		// ========================================
		var n1 = 10;
		var n2 = 20;
		function fn2(n1){
			// 形参n1接收到传进来的值10
			console.log(n1)//10 形参n1
			n1 += 5;//n1指的是形参n1
			console.log(n1)//15
			var n2 = 200;
			console.log(n2)//200
		}

		fn2(n1)
		console.log(n1)//10
		console.log(n2)//20

		// js预解析 过程: 把声明的变量和函数进行提升
		// 变量的提升: 将变量的声明提升到当前作用域最上方, 但是赋值提升, 留在原地
		console.log(m1)
		var m1 = 1;

		// =====>
		// var m1;
		// console.log(m1)
		// m1 = 1

		// var game = "火影忍者"
		// function f(){
		// 	console.log(game) //undefined
		// 	var game = "和平英精"
		// 	console.log(game) //和平英精
		// }

		// f()

		// 相当于
		// var game;
		// game = "火影忍者"
		// function f(){
		// 	var game;
		// 	console.log(game)//undefined
		// 	game = "和平英精"
		// 	console.log(game)
		// }
		// f()

		// =====================================================
		var name = "火影"
		function f2(name){
			console.log(name)//火影
			var name = "柯南"
			console.log(name)//柯南
		}
		f2(name)

		// 相当于
		// var game;
		// game = "火影"
		// function f(name){
		// 在函数内部, 参数名name已存在, var name就会被忽略掉
		// 	var game;
		// 	console.log(game)//火影
		// 	game = "柯南"
		// 	console.log(game)//柯南
		// }
		// f(name)

		//编写一个函数,计算任意两个数字之间所能组成的所有奇数,数字必须是个位,例如 0 ~ 3 ==> 01 03 11 13 21 23 31 33 f1(0,3)
		let a = ''
		function fn(start, end){
			for(let i = start; i<= end; i++){
				//找出个位数 个位数是奇数整体就是奇数
				if(i % 2 ==1){
					for(let j = start; j <= end; j++){
						a += '' + j + i + ""
						console.log("个位数" + i + "j为" + j, a)
					}
				}
			}
			return a
		}
		console.log(fn(0,9))

		// 假设一个简单的ATM机取款过程是这样的
		// 		首先提示用户输入密码
		// 		最多只能输入三次，超过三次则提示用户"密码错误次数上限，请取卡"，结束交易
		// 		如果密码正确，在提示用户输入取款金额
		// 		ATM机只能输出100元的纸币，一次取钱要求最低100，最大1000
		// 		若用户输入的金额符合上述要求，则打印输出取得的钱数，最后提示用户"交易完成，请取卡"
		// 		否则提示用户重新输入金额
		// 		假设密码111111，请编程实现
		let count = 3
		let flag = true
		let flagmoney = true
		while(){
			let pwb = prompt("请输入密码")
			if (pwd != "111111") {
				alert("密码错误，请重新输入，还剩" + count +"机会")
			}else{
				alert("密码正确")
				while(flagmoney){
					let money = Number(prompt("请输入金额"))
					if(money % 100 != 0 || money > 1000){
						alert("请输入正确的金额")
					}else{
						alert("请取卡，共" + money + "元")
						break
					}
				}
				flag = false
			}
			if(count == 0){
				alert("密码输入次数上限")
				flag = false
			}
		}
	</script>
</body>
</html>